#ifndef CLIENT_CHECKER_HPP
#define CLIENT_CHECKER_HPP


#include <boost/thread.hpp>

namespace netspy
{


/**
 * Klasa opakowujaca wątki odpytujące klientów 
 */


class ClientChecker
{

public: 
       
	static ClientChecker & getInstance()
	{
		static ClientChecker checker;
		return checker;
	}
	
	/**
       	*   Uruchamia zadaną ilość wątków obsługujących zapytania o stan klientów 
       	*/
 
       	void runCheckers(unsigned int checkersAmount);
       	
	/**
       	 *  Obsługuje proces sesji komunikacyjnej z klientem. Opalany w osobnym wątku. Oczekuje na zgłoszenia na kolejce reqeustów, 
	 *  za pomocą interfejsu klasy RequestManager.
       	 */

	void checkerSession();
	
    
private:

	ClientChecker(ClientChecker &cl);
	ClientChecker():isRunning_(false){};
	        
	bool isRunning_;
	boost::thread_group checkerGroup_;

};

}

#endif
